// Vue特性标志polyfill - 确保在Vue导入前就定义
// 这个文件必须在任何Vue相关导入之前加载

(function() {
  'use strict';
  
  // 定义所有Vue编译时特性标志
  const flags = {
    '__VUE_OPTIONS_API__': true,
    '__VUE_PROD_DEVTOOLS__': false,
    '__VUE_PROD_HYDRATION_MISMATCH_DETAILS__': false
  };
  
  // 在所有可能的全局对象上定义这些变量，但允许重写
  const globalObjects = [window, globalThis, self, global].filter(obj => 
    obj && typeof obj === 'object'
  );
  
  globalObjects.forEach(globalObj => {
    Object.keys(flags).forEach(flag => {
      // 只有在未定义时才设置，允许Vue内部重写
      if (typeof globalObj[flag] === 'undefined') {
        try {
          Object.defineProperty(globalObj, flag, {
            value: flags[flag],
            writable: true,    // 允许写入
            configurable: true, // 允许重新配置
            enumerable: true
          });
        } catch (e) {
          // 如果defineProperty失败，直接赋值
          globalObj[flag] = flags[flag];
        }
      }
    });
  });

})();

// 修复btoa/atob编码问题
if (typeof window !== 'undefined' && window.btoa) {
  const originalBtoa = window.btoa;
  const originalAtob = window.atob;
  
  window.btoa = function(str) {
    try {
      if (str == null || str === '') return '';
      str = String(str);
      
      // 检查是否包含非Latin1字符
      if (/[^\x00-\xFF]/.test(str)) {
        // 使用UTF-8编码处理非Latin字符
        const encoded = encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
          return String.fromCharCode(parseInt(p1, 16));
        });
        return originalBtoa(encoded);
      }
      
      return originalBtoa(str);
    } catch (e) {
      console.warn('btoa encoding failed, using fallback:', e.message);
      // 使用TextEncoder作为fallback
      try {
        if (typeof TextEncoder !== 'undefined') {
          const encoder = new TextEncoder();
          const uint8Array = encoder.encode(str);
          let binary = '';
          uint8Array.forEach(byte => {
            binary += String.fromCharCode(byte);
          });
          return originalBtoa(binary);
        }
      } catch (fallbackError) {
        // 如果所有方法都失败，返回空字符串并静默处理
        return '';
      }
      return '';
    }
  };
  
  window.atob = function(str) {
    try {
      if (!str || typeof str !== 'string') return '';
      
      // 移除空白字符
      str = str.replace(/\s/g, '');
      
      // 添加padding如果需要
      while (str.length % 4) {
        str += '=';
      }
      
      // 验证base64格式（更宽松的验证）
      if (!/^[A-Za-z0-9+/=]*$/.test(str)) {
        throw new Error('Invalid base64 string');
      }
      
      return originalAtob(str);
    } catch (e) {
      console.warn('atob decoding failed:', e.message);
      return '';
    }
  };
}